package jers;

import java.io.Serializable;
import java.util.Map;


/**
 * Interface para um objeto {@link Result}.
 * <p>
 * Este objeto implementa o metodo de transporte dos resultados 
 * gerados pelo trabalho executado.
 * <br>
 * Uma instancia do objeto {@link Result} pode ser construida pela fabrica 
 * {@link Factory}.
 * <br>
 * Um {@link Result} e basicamente um objeto que implementa a interface 
 * {@link Serializable} e possui um {@link Map}. 
 * </p>
 * 
 * @see {@link Factory}, {@link Serializable}
 * 
 * @author 
 * 		<a href="mailto:felipe.zappala@gmail.com">
 * 			Luis Felipe Zappala
 * 		</a> [ <a href="http://lncc.br/ist">ISTCC-P</a> / 2009 ]
 */
public interface Result extends Serializable {
	
	/**
	 * Retorna o objeto {@code T} associado com a chave informada.
	 * 
	 * @param 
	 * 		<T> - O tipo do objeto a ser retornado.
	 * 			  Este deve implementar {@link java.io.Serializable}
	 * @param 
	 * 		key - A chave, o nome do objeto retornado.
	 * @return 
	 * 		O objeto encontrado ou {@code null} caso contrario.
	 */
	public <T extends Serializable> T get(String key);
	
	/**
	 * Configura um objeto {@code T} na chave informada para 
	 * retornar informacoes. 
	 * 
	 * @param 
	 * 		<T> - O tipo do objeto a ser retornado. 
	 * 			  Este deve implementar {@link java.io.Serializable}
	 * @param 
	 * 		key - A chave, o nome do objeto.
	 * @param 
	 * 		value - O objeto para retornar informacao.
	 */
	public <T extends Serializable> void set(String key, T value);
	
}
